<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>封装promises</title>
  <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.0/jquery.min.js"></script>
  <script>
    // 利用工厂函数的模式，封装promise构建方法
    function getPromise(url, method='POST', data) {
      return new Promise((resolve,reject) => {
        $.ajax({
          url,
          method,
          data,
          contentType: 'application/json',
          success: function(res) {
            resolve(res);
          },
          error: function(err) {
            reject(err);
          }
        })
      })
    }

    // 调用getPromise，生成promise实例
    let baseUrl = 'http://47.94.46.113:7788'
    let data = JSON.stringify({
      username: 'admin1',
      password: '123321'
    })
    let p1 = getPromise(baseUrl+'/user/login', 'POST', data)
    let p2 = getPromise(baseUrl+'/user/logout')

    // 通过调用promise实例中的方法，获取该实例执行的结果
    // p1.then((res) => {
    //   console.log(res);
    // }).catch((err) => {
    //   console.log(err);
    // }).finally(() => {
    //   console.log('请求结束');
    // })

    // p2.then((res) => {
    //   console.log(res);
    // }).catch((err) => {
    //   console.log(err);
    // })

    let p3 = Promise.any([p1,p2])
    p3.then((res) => {
      console.log(res);
    }).catch((err) => {
      console.log(err);
    })
  </script>
</head>
<body>
  
</body>
</html>